﻿// Copyright 2007-2008 Rory Plaire (codekaizen@gmail.com)

namespace NPack.Interfaces
{
    /// <summary>
    /// Defines a type which has typical numerically computable properties.
    /// </summary>
    /// <typeparam name="TInput">Input type of argument.</typeparam>
    /// <typeparam name="TOutput">Result type of computation.</typeparam>
    public interface IComputable<TInput, TOutput>
        : IComputable<TOutput>,
          IAddable<TInput, TOutput>,
          ISubtractable<TInput, TOutput>,
          IMultipliable<TInput, TOutput>, 
          IDivisible<TInput, TOutput> 
    {
        /// <summary>
        /// Sets the value of the IComputable value.
        /// </summary>
        /// <param name="value">Value used to set the IComputable.</param>
        /// <returns>The value of the IComputable converted from <paramref name="value"/>.</returns>
        TOutput Set(TInput value);
    }
}